\chapter{Pflichtenheft}\label{chap:pflichtenheft}
\section{Zielbestimmungen}
\subsection{Musskriterien}
Es soll ein System zur einfachen Implementation von Algorithmen auf der Zielplattform (uClinux) erstellt werden. Das Framework muss die wichtigsten Grundfunktionen der Kamera in Form von C Funktionen zur Verfügung stellen. Dabei kann die Software jeweils auf zwei Arten kompiliert werden: Einerseits für das Zielsystem (in diesem Fall das LCV Board), andererseits zu Testzwecken für das Hostsystem(in diesem Fall Linux). Die Kamerafunktionen werden simuliert. Es muss möglich sein, das Framework mit weiteren Funktionalitäten zu erweitern oder es für die Verwendung auf anderen Host- bzw. Zielsystemen anzupassen.
\subsection{Sollkriterien}
Eine Bildverarbeitungsbibliothek die nützliche Funktionen wie z.B Bayer-Conversion zur Verfügung stellt.
Die Entwicklung soll bequem in einer IDE erfolgen können.
Debugging auf dem Zielsystem mittels gdb-server.
\subsection{Kannkriterien}
\begin{itemize}
\item Die Nutzung des zweiten Flash-Speichers mittels ffs2 (Flash File System)
\item Der Treiber für den MT9V032 Sensor weist einige Unschönheiten auf die bereinigt werden müssen:
\begin{itemize}
\item Eine autotrigger Funktion die den Sensor mind. 5x pro Sekunde triggert, damit die Kondensatoren sich nicht vollständig entladen.
\item DMA Transfer explizit per IOCTL Befehl auslösen
\item DMA Transfer als 8Bit und nicht als 10Bit durchführen
\end{itemize}
\item Hardware-in-the-Loop Debugging
\item SaveBuffer / LoadBuffer zu Abspeichern eines Bildes auf den freien 4MB Speicher
\end{itemize}

\subsection{Abgrenzungskriterien}
Komplexe Bildverarbeitungsalgorithmen selbst müssen im System nicht implementiert werden.
\section{Produkteinsatz}
\subsection{Anwendungsbereiche}
Das System soll in der Entwicklung von Bildverarbeitungssoftware speziell für die zur Verfügung gestellte intelligente Low-Cost Kamera zum Einsatz kommen.
\subsection{Zielgruppen}
Bei den Zielgruppen handelt es sich sowohl um Open- wie auch ClosedSource Entwickler. Die Entwickler verfügen über fundierte Linux und C Kenntnisse.
\subsection{Betriebsbedingungen}
Im normalen Betrieb werden Bilder gelesen, Ausgewertet und je nach Resultat GPIO Ausgänge auf high oder low gesetzt.
\section{Funktionsumfang}
Das Framework soll folgende kameraseitige Funktionalitäten unterstützen:
\begin{itemize}
\item Konfguration der Kamera (Register)
\item Verarbeitung von Bildern
\item Absetzen von Signalen über definierte Ausgänge
\end{itemize}
Hostseitig wird die Konfiguration aus einer oder mehrerer Textdateien eingelesen und bei Änderungen jeweils ein Log-Eintrag geschrieben. Ebenso wird mit den GPIO Ports verfahren.
Die Bilder werden vom Dateisystem eingelesen, anstelle eines Kamerazugriffes.
\\
Zusätzlich wird die Verfügbarkeit der folgenden Funktionalitäten auf dem Zielsystem sichergestellt:
\begin{itemize}
\item Allozieren von Speicher
\item Netzwerkkommunikation
\end{itemize}

\section{Produktfunktionen}
Eine Übersicht über die zur Verfügung gestellten Funktionen kann man dem Dokument "Definition Kamera API" entnehmen.
\section{Produktleistungen}
Geschwindigkeitsoptimierung der Kamera steht nicht im Vordergrund, obschon natürlich eine möglichst optimale Implementation erwünscht ist.
\section{Qualitätsanforderungen}
Das Framework entspricht den gängigen Coding-Styles, ist einfach zu erweitern und gut dokumentiert.
